(() => {

    // 1.基本定义
    let arr1: [number, string, boolean]
    arr1 = [1, '欧洲', false]
    // 报错，越界访问，推断类型为undefined
    // arr1[3] = 'nihao'

    // 越界添加，会使用联合类型
    arr1.push('南美洲')

    // 报错，联合类型，并不存在object
    // arr1.push({})
    console.log(arr1);


    // 2. rest 拓展运算符
    let arr2: [number, ...string[]]
    arr2 = [123, '李白', '杜甫']

    // 越界添加，会使用联合类型
    arr2.push(123)
    console.log(arr2);


    // 3.可选类型
    let arr3: [number, string?, boolean?]
    arr3 = [123]
    arr3 = [123, '雍正']
    arr3 = [123, '乾隆', false]
    arr3.push(456)
    console.log(arr3);


    // 综合
    function test(args1: number, args2: string, args3: boolean) {
        console.log(args1);
    }
    function test2(...agrs: [number, string, boolean?]) {
        console.log(agrs);
    }

    test2(123, '年羹尧')
    test2(456, '田镜文', false)
})()
